﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace BrainTechLLC.Silverlight.Controls
{
    public interface IDataVisualizer : IUICanOpenClose, IUICanSave
    {
        event EventHandler<ObjectEventArgs<LocationInt>> RequestEditGameLocation;
        event EventHandler<ObjectEventArgs<LocationInt>> RequestGoLocation;
        event EventHandler<ObjectEventArgsNonRef<long>> RequestEditID;
        void SetVisualizedData(DataVisualizer vis, object o);
        Type VisualizeType { get; }
        string VisualizerName { get; }
        Panel MainCanvas { get; }
    }

    public interface IUICanHideHeader : IUICanRefresh
    {
        bool HideHeader { get; set; }
    }

    public interface ICanPosition : IUICanRefresh
    {
        bool IsModal { get; set; }
        bool CenterScreen { get; set; }
    }

    public interface IUICanSave : IUICanRefresh
    {
        event EventHandler<ObjectEventArgsNonRef<bool>> RequestSave;
        event EventHandler Save;
        bool ShowSave { get; set; }
    }

    public interface IUICanEdit : IUICanRefresh
    {
        // event EventHandler<ObjectEventArgsNonRef<bool>> RequestEdit;
        bool ShowEdit { get; set; }
    }

    public interface IUICanRefresh
    {
        void Refresh();
    }

    public interface IUICanOpenClose : IUICanRefresh
    {
        bool IsOpen { get; set; }
        bool ShowClose { get; set; }
        event EventHandler<ObjectEventArgsNonRef<bool>> WantClose;
        event EventHandler CloseWindow;
        WindowContainer Window { get; }
    }

    public interface ICanRebindData<T> where T : class
    {
        event EventHandler<ObjectEventArgs<T>> RebindingData;
        void UpdateBindings();
    }

    public interface ICollectionDataVisualizer : IDataVisualizer
    {
    }

    public interface ISingleItemDataVisualizer : IDataVisualizer
    {
    }
}
